package com.niit.musicserver.controller.admin;

import com.github.pagehelper.PageInfo;
import com.niit.musicserver.common.Result;
import com.niit.musicserver.entity.domain.Songlist;
import com.niit.musicserver.service.SonglistService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Description:
 * @Author: cheng_jianzhen
 * @CreateTime： 2024/1/15 10:37
 */
@Slf4j
@RestController
public class SonglistController {

    @Autowired
    private SonglistService songlistService;

    /**
     * @Description: * 分页查询歌单列表
     * 根据查询条件(歌单名称、歌单风格、每页记录数、第几页)进行分页査询歌单列表
     * @Author: cheng_jianzhen
     * @CreateTime: 2024/1/16 10:11
     * @param: songlist
     * @return: com.niit.musicserver.common.Result
     **/

//1、请求方式   2、请求地址、请求参数（query，path,body)
    @GetMapping("/admin/songlist")
    public Result songlist(Songlist songlist){
        log.info("查询歌单列表请求参数： {},{},{}", songlist,songlist.getPageNum(),songlist.getPageSize());
        List<Songlist> songlists = songlistService.getListBySonglist(songlist);
//封装分页对象，响应给前端
        PageInfo<Songlist> pageInfo = new PageInfo<>(songlists);
        System.out.println("pageInfo =  " + pageInfo);
        return Result.success("查询成功!",pageInfo);

//        return Result.success("查询成功!",songlists);
    }

    /**
     * @Description: 根据id获取歌单详细信息
     * @Author: cheng_jianzhen
     * @CreateTime: 2024/1/17 10:13
     * @param: songlistId
     * @return: com.niit.musicserver.common.Result
     **/
     //根据id获取歌单详细信息
    // 请求方式：使用get请求 -----查询
    // 请求地址： /admin/soglist/1
    // 请求参数： path，只有一个id
   // 请求响应参数
    @GetMapping("/admin/songlist/{id}")  //{}为占位符，匹配参数
    public Result getSonglistById(@PathVariable("id") Integer songlistId){
        log.info("根据Id获取歌单详细信息接口：{}",songlistId);
        Songlist songlist = songlistService.getById(songlistId);
        return Result.success("查询成功!",songlist);
    }

    /**
     * @Description: 更新歌单
     * @Author: cheng_jianzhen
     * @CreateTime: 2024/1/17 10:25
     * @param: songlist
     * @return: com.niit.musicserver.common.Result
     **/
    //根据id修改歌单信息
    // 请求方式：使用put请求 -----更新
    // 请求地址： /admin/soglist
    // 请求参数： body,封装了id以及其他要修改的信息
    // 请求响应参数：成功与否状态
    @PutMapping("/admin/songlist")
    public Result updateSonglist(@RequestBody Songlist songlist){
        log.info("更新个单信息 ：{}",songlist);
        int rows= songlistService.updateById(songlist);
        if (rows != 1 ){
            return Result.faile("更新失败！");
        }
        return Result.success("更新成功！");
    }

    /**
     * @Description: 新增歌单
     * @Author: cheng_jianzhen
     * @CreateTime: 2024/1/17 11:02
     * @param: songlist
     * @return: com.niit.musicserver.common.Result
     **/
    //新增歌单
    // 请求方式：使用post请求 -----新增
    // 请求地址： /admin/songlist
    // 请求参数： body,封装了除id（id是插入之后才生成）以外的其他要新增的信息
    // 请求响应参数：成功与否状态
    @PostMapping ("/admin/songlist")
    // 使用RequestBody注解，将请求体映射为Songlist对象，并命名为songlist
    public Result addSonglist(@RequestBody Songlist songlist){
        log.info("新增歌单信息 ：{}",songlist);    // 使用日志打印新增歌单信息
        int rows= songlistService.saveSonglist(songlist);    // 调用songlistService的saveSonglist方法保存歌单信息，并将结果赋值给rows
        if (rows != 1 ){
            return Result.faile("新增失败！");
        }
        return Result.success("新增成功！");
    }


    /**
     * @Description: 根据id删除歌单
     * @Author: cheng_jianzhen
     * @CreateTime: 2024/1/18 8:53
     * @param: id
     * @return: com.niit.musicserver.common.Result
     **/

    //根据id删除歌单
    // 请求方式：delete -----删除
    // 请求地址： /admin/songlist/1
    // 请求参数： path,只有一个参数
    // 请求响应参数：成功与否状态
    @DeleteMapping("/admin/songlist/{id}")
    // 使用PathVariable注解，将路径中的{id}映射为方法参数id
    public Result deleteById(@PathVariable("id")Integer id){
        log.info("删除歌单 ：{}",id);  // 记录日志，打印正在删除的歌单的ID
        int rows = songlistService.deteteById(id); // 调用songlistService的deteteById方法，删除指定ID的歌单
        if (rows != 1){
            return Result.faile("删除歌单失败！");
        }
        return Result.success("删除歌单成功！");
    }


}
